home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
- #include <fmcfrb.h>
- #include "defs.h"
- extern int strlen();
-
-
- /*
- * 1文字入力
- *
- *
- */
- void MOJI_input1Char(UCHAR *moji_area,unsigned int ky
- ,int max_moji,int *lcur_x)
- {
- unsigned int l;
- char dmy[80];
- int cur_x,tst_x,before_x;
-
-
- if (ky == 0xFFFF) return;
-
- cur_x = *lcur_x;
- if (cur_x > strlen(moji_area)) cur_x = strlen(moji_area);
- if (cur_x == max_moji) cur_x = max_moji-1;
-
-
- switch (ky) {
- case 0x8: /* BS */
- if (cur_x != 0) {
- if ( cur_x > 1 && iskanji(*(moji_area+cur_x - 2))) {
- cur_x -= 2;
- strcpy(moji_area+cur_x,moji_area+cur_x+2);
- } else {
- cur_x--;
- strcpy(moji_area+cur_x,moji_area+cur_x+1);
- }
- }
- break;
- case 0x7f: /* DEL */
- l = strlen(moji_area);
- if (l != 0 && l >= (cur_x+1)) {
- if (l == 1 || iskanji(*(moji_area+cur_x)) == 0) {
- strcpy(moji_area+cur_x,moji_area+cur_x+1);
- } else {
- strcpy(moji_area+cur_x,moji_area+cur_x+2);
- }
- }
- break;
-
- case 0x1d: /* ← */
- tst_x = before_x = 0;
- while (cur_x != tst_x && tst_x <max_moji) {
- before_x = tst_x;
- if (iskanji(*(moji_area+tst_x)))
- tst_x += 2;
- else
- tst_x++;
-
- }
- cur_x = before_x;
- break;
- case 0x1c: /* → */
- if (cur_x != strlen(moji_area)) {
- if (iskanji(*(moji_area+cur_x))) {
- cur_x = cur_x + 2;
- } else {
- cur_x++;
- }
- if (cur_x > max_moji-1) cur_x = max_moji-1;
- }
- break;
- case 0x0d: /* ret */
- break;
- default:
- if (strlen(moji_area) != max_moji-1 || iskanji(ky) == FALSE) {
- if (strlen(moji_area) < max_moji && ky < 255 && ky > 31) {
- if (cur_x == strlen(moji_area)) {
- *(moji_area+cur_x) = ky;
- *(moji_area+cur_x+1) = '\0';
- } else {
- strcpy(dmy,moji_area+cur_x);
- strcpy(moji_area+cur_x+1,dmy);
- *(moji_area+cur_x) = ky;
- }
- cur_x++;
- if (cur_x > max_moji-1) cur_x = max_moji-1;
- }
- }
- break;
- }
-
- *lcur_x = cur_x;
-
- }